// #include <bits/stdc++.h>
// using namespace std;
// typedef pair<int, int> pii;

// int main() {
//     int n, w;
//     cin >> n >> w;
//     vector<priority_queue<pii, vector<pii>, greater<pii>>> vec(w + 1);
//     for(int i = 1; i <= n; i++) {
//         int x, y;
//         cin >> x >> y;
//         vec[x].push({y, i});
//     }
//     vector<int> cnt(n + 1, INT_MAX);
//     while(1) {
//         int f = 0;
//         int mx = 0;
//         for(int i = 1; i <= w; i++) {
//             if(vec[i].empty()) {
//                 f = 1;
//                 break;
//             }
//             mx = max(mx, vec[i].top().first);
//         }
//         if(f) break;
//         for(int i = 1; i <= w; i++) {
//             cnt[vec[i].top().second] = mx - 1;
//             vec[i].pop();
//         }
//     }
//     int q;
//     cin >> q;
//     while(q--) {
//         int t, p;
//         cin >> t >> p;
//         if(cnt[p] >= t) {
//             cout << "Yes\n";
//         }else{
//             cout << "No\n";
//         }
//     }
// }




#include <bits/stdc++.h>
using namespace std;
#define int long long

int check(string x) {
    int t = x.size() / 3;
    if(t == 1) {
        int p = x[0] + x[1] + x[2] - 3 * '0';
        if(p >= 2) return 1;
        else return 0;
    }
    int x1 = check(x.substr(0, t));
    int x2 = check(x.substr(t, t));
    int x3 = check(x.substr(t + t));
    int p = x1 + x2 + x3;
    if(p >= 2) return 1;
    else return 0;
}

signed main(){
    int n;
    cin >> n;
    string s;
    cin >> s;
    int f = check(s);
    auto dfs = [&](auto&& dfs, string x)->int {
        int t = x.size() / 3;
        if(t == 1) {
            int p = x[0] + x[1] + x[2] - 3 * '0';
            if(p >= 2) p = 1;
            else p = 0;
            if(p != f) return 0;
            if(x[0] == x[1] && x[1] == x[2])
                return 2;
            return 1;
        }
        int x1 = dfs(dfs, x.substr(0, t));
        int x2 = dfs(dfs, x.substr(t, t));
        int x3 = dfs(dfs, x.substr(t + t));
        // int p = x1 + x2 + x3;
        // cout << x1 << ' ' << x2 << ' ' << x3 << endl;
        int p1 = check(x.substr(0, t));
        int p2 = check(x.substr(t, t));
        int p3 = check(x.substr(t + t));
        if(p1 == p2 && p2 == p3) {
            return min({x1 + x2, x1 + x3, x2 + x3});
        }else{
            if(p1 == p2) return min(x1, x2);
            if(p2 == p3) return min(x2, x3);
            if(p1 == p3) return min(x1, x3);
        }
    };

    cout << dfs(dfs, s) << endl;
    return 0;
}